package com.huluobo.a2307douyindemo.demo.lifeCycle

import android.os.CountDownTimer
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent

/**
 *  Created by LC on 2025/9/12.
 *  Observer 观察者
 *  LifeCycle 总结
 *  观察者模式三要素 观察者(Observer) 被观察者(Observable) 订阅关系(subscribe)
 *  1.如果要使用LifeCycle,首先要实现LifecycleObserver 接口,让他可以去感知宿主的升周期变化
 *  2.需要一个宿主,LifeCycleOwner,由于AppCompatActivity 已经实现了宿主接口,所以可以省略
 *  3.通过   lifecycle.addObserver 产生订阅关系
 *  4.可以有效解决宿主对象中控制其他控件的生命周期,让观察者可以跟随宿主的生命周期做出自行的判断,来调用某些方法,比如创建和销毁
 *  可以有效避免内存泄漏
 */
class AdManager(adViewModel: ADViewModel) : LifecycleObserver {
    private val countDownTimer = object : CountDownTimer(adViewModel.timing, 1000) {
        override fun onTick(millisUntilFinished: Long) {
            Log.e("TagA", "广告剩余:${(millisUntilFinished / 1000).toInt()}")
//            //4.对应想要回调数据的位置调用一次接口的方法
//            adManagerListener?.timing((millisUntilFinished / 1000).toInt())
            adViewModel.setADTimingResult(millisUntilFinished)
        }

        override fun onFinish() {
            Log.e("TagA", "广告结束")
//            adManagerListener?.finish()
        }
    }

    //当被观察者页面创建时
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun start() {
        Log.e("TagA", "开始计时")
        countDownTimer.start()
    }

    //当被观察者页面销毁时
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun stop() {
        Log.e("TagA", "结束计时")
        countDownTimer.cancel()
    }

//    //1.创建接口
//    interface AdManagerListener {
//        //计时时
//        fun timing(second: Int)
//
//        //结束时
//        fun finish()
//    }
//
//    //2.声明接口
//    private var adManagerListener: AdManagerListener? = null
//
//    //3.set方法
//    fun setAdManagerListener(adManagerListener: AdManagerListener) {
//        this.adManagerListener = adManagerListener
//    }
}